package com.tank02.tank;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;

public class MyPanel extends JPanel implements KeyListener {
    //定义我的坦克
    Hero hero=null;
    //定义敌人坦克,放入vector中
    Vector<EnemyTank> enemyTanks=new Vector<>();
    int enemyTankSise=3;
    //初始化坦克
    public MyPanel(){
        //初始化自己的坦克
        hero=new Hero(100,100);
        hero.setSpeed(5);
        //初始化敌人的坦克
        for(int i=0;i<enemyTankSise;i++){
            EnemyTank enemyTank=new EnemyTank(100*(i+1),0);
            enemyTank.setDirect(2);
            enemyTanks.add(enemyTank);
          //  enemyTanks.add(new EnemyTank(100*(i+1),0));
        }
    }

    //设置画笔
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.black);
        g.fillRect(0,0,1000,750);
        //绘制坦克
        drawtank(hero.getX(),hero.getY(),g,hero.getDirect(),1);
//        drawtank(hero.getX()+100,hero.getY(),g,1,0);
//        drawtank(hero.getX()+200,hero.getY(),g,2,0);
//        drawtank(hero.getX()+300,hero.getY(),g,3,0);
        //绘制敌人的坦克
        for(int i=0;i<enemyTankSise;i++){
            EnemyTank enemyTank=enemyTanks.get(i);
            drawtank(enemyTank.getX(),enemyTank.getY(),g,enemyTank.getDirect(),0);
        }


    }

    /**
     *
     * @param x  坦克x坐标
     * @param y 坦克y坐标
     * @param g
     * @param direct 坦克方向
     * @param type 坦克类型
     */
//画坦克
    public void drawtank(int x,int y,Graphics g,int direct,int type){
        //根据坦克型号确定画笔颜色
        switch(type){
            case 0:
                //0表示自己的坦克,用蓝色
                g.setColor(Color.blue);
                break;
            case 1:
                //1表示敌人的坦克,用黄色
                g.setColor(Color.yellow);
                break;
        }
        //根据坦克方向绘制坦克主体
        switch(direct){
            case 0:       //0表示坦克向上
                //坦克左轮
                g.fill3DRect(x,y,10,60,false);
                //坦克右轮
                g.fill3DRect(x+30,y,10,60,false);
                //坦克中部
                g.fill3DRect(x+10,y+10,20,40,false);
                //坦克王八盖
                g.fillOval(x+10,y+20,20,20);
                //坦克炮管
                g.drawLine(x+20,y+30,x+20,y-10);
                break;
            case 1:  //1表示向右
                //坦克左轮
                g.fill3DRect(x,y,60,10,false);
                //坦克右轮
                g.fill3DRect(x,y+30,60,10,false);
                //坦克中部
                g.fill3DRect(x+10,y+10,40,20,false);
                //坦克王八盖
                g.fillOval(x+20,y+10,20,20);
                //坦克炮管
                g.drawLine(x+30,y+20,x+70,y+20);
                break;
            case 2://2表示向下
                //坦克左轮
                g.fill3DRect(x,y,10,60,false);
                //坦克右轮
                g.fill3DRect(x+30,y,10,60,false);
                //坦克中部
                g.fill3DRect(x+10,y+10,20,40,false);
                //坦克王八盖
                g.fillOval(x+10,y+20,20,20);
                //坦克炮管
                g.drawLine(x+20,y+30,x+20,y+70);
                break;
            case 3://向左
                //坦克左轮
                g.fill3DRect(x,y,60,10,false);
                //坦克右轮
                g.fill3DRect(x,y+30,60,10,false);
                //坦克中部
                g.fill3DRect(x+10,y+10,40,20,false);
                //坦克王八盖
                g.fillOval(x+20,y+10,20,20);
                //坦克炮管
                g.drawLine(x+30,y+20,x-10,y+20);
                break;
            default:
                break;
        }
    }

    @Override//有字符输入时会触发
    public void keyTyped(KeyEvent e) {

    }

    @Override//键被按下时会触发
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode()==KeyEvent.VK_W){
            //修改坦克方向
            hero.setDirect(0);
            //修改坦克坐标
            hero.moveUp();
        }
        else if (e.getKeyCode()==KeyEvent.VK_D) {
            hero.setDirect(1);
            hero.moveRight();
        }
        else if(e.getKeyCode()==KeyEvent.VK_S){
            hero.setDirect(2);
            hero.moveDown();
        }
        else if(e.getKeyCode()==KeyEvent.VK_A){
            hero.setDirect(3);
            hero.moveLeft();
        }
        this.repaint();
    }

    @Override//键被释放时会被释放
    public void keyReleased(KeyEvent e) {

    }
}
